Snyk IaCの結果をHTMLファイルに出力する

Snyk IaCの結果をHTMLファイルに出力する

Clock Icon2022.07.19

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは!AWS事業本部コンサルティング部のたかくに(@takakuni_)です。

今回は、Snyk IaCの解析結果をHTMLファイルに出力してみようと思います。

以前の「Snyk IaCの結果をWeb UIに直接出力する」では、GitHubが使えない環境下で Snyk Web UI に Snyk IaC の結果を出力する方法をご紹介しました。

https://dev.classmethod.jp/articles/snyk-iac-results-with-the-snyk-web-ui-report-option/

今回は、「snyk/snyk-to-html」を使って、snyk iac testコマンドの結果をHTML出力しようと思います。

はじめに

まず初めに、snyk iac testコマンドでは以下の形式からテスト結果を出力できます。

  • JSON
  • SARIF

https://docs.snyk.io/snyk-cli/commands/iac-test#options

Snyk CLIコマンド単体ではHTML出力できないため、今回は「snyk/snyk-to-html」を使ってJSON形式からHTML形式へ変換します。

余談ですが、snyk iac describeコマンドでは、HTML形式で結果を出力可能です。

Options for output
--quiet
Output only the scan result to stdout.

--json
Output the report as JSON to stdout.

--html
Output the report as html to stdout.

--html-file-output=
Output the report as html into a file.

https://docs.snyk.io/snyk-cli/commands/iac-describe#options-for-output

やってみた

今回、以下のコードを使用します。

terraform {
  required_providers {
    aws = {
      source = "hashicorp/aws"
      version = "4.22.0"
    }
  }
  backend "s3" {
    bucket = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
    key    = "snyk_iac_test/terraform.tfstate"
    region = "ap-northeast-1"
  }
}

provider "aws" {
  region = "ap-northeast-1"
}

data "aws_region" "current" {}
data "aws_caller_identity" "self" {}

resource "aws_ebs_volume" "example" {
  availability_zone = "${data.aws_region.current.name}a"
  size              = 40

  tags = {
    Name = "${var.pref}-snyk-iac-volume"
  }
}

想定では「EBSの暗号化設定」が行われていない脆弱性が検出されます。

https://snyk.io/security-rules/SNYK-CC-TF-3

インストール

まずは、インストールを行います。README.mdに記載されている通りインストールを行います。

npm install snyk-to-html -g

パイプ(|)を使用する方法で実行

デフォルトではsnyk-to-htmlは、snyk iac testコマンドのstdout(標準出力)からstdin(標準入力)で受け取り実行します。

そのため、パイプ(|)でI/Oを受け渡して実行してみます。

snyk iac test --json | snyk-to-html -o results.html

想定通り、EBSについて脆弱性が検出されました。

JSONファイルからHTML変換

先程は、パイプ(|)を利用してI/Oの受け渡しを行いました。

続いては、JSON形式で出力したファイルを入力値としてHTMLファイルを作成します。

まずは、snyk iac testコマンドの出力結果をJSON形式で保存します。

snyk iac test --json > results.json

JSON形式で保存した結果を「-i」オプションで入力値として受け取り実行します。

snyk-to-html -i results.json -o results_from_jsonfile.html

summaryオプション

-s」オプションを使用することで、HTMLレポートをよりシンプルなレポートにできます。

snyk-to-html -i results.json -s -o results_summary.html

-s」オプションを使用した場合、「Impact」や「Remediation」が省略されたレポートが作成されます。

オプションなし(デフォルト)

オプションあり

個人的には、Public IDのリンクを踏めば「Impact」や「Remediation」は同じものが表示されるので、オプションの利用がオススメです。

参考

https://docs.snyk.io/products/snyk-code/cli-for-snyk-code/displaying-the-cli-results-in-an-html-format-using-the-snyk-to-html-feature

おわりに

以上、「Snyk IaCの解析結果をHTMLファイルに出力」でした。

snyk iac testコマンドでもHTML出力できないか探していたところ見つかったソリューションになります!

「snyk-to-html」は、Snyk IaC以外のsnyk test系のコマンドでも利用可能なため、ぜひその他コマンドでも利用してみてください。

以上、AWS事業本部コンサルティング部のたかくに(@takakuni_)でした!

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.